#ifndef IRENDERQUEUE_H
#define IRENDERQUEUE_H

#include "Framework/Prerequisites.h"

namespace tyro
{
	namespace Scene
	{
		class IRenderQueue
		{
		public:

			enum RenderQueueID
			{
				RENDER_QUEUE_MAIN = 10
			};

			#define TYRO_DEFAULT_RENDERING_PRIORITY 100;

			typedef ::stdext::hash_map<UINT_8, IRenderQueueGroup*> RenderQueuedGroupMap;

			IRenderQueue();
			void ProcessVisibleObject( Geometry::Object* obj , Camera::Camera* camera);
			UINT_8 GetDefaultGroup(void) { return defaultQueueGroup; }
			void AddRenderable(Graphics::IRenderable* rend, UINT_8 groupID);
			void AddRenderable(Graphics::IRenderable* rend, UINT_8 groupID, UINT_16 priority);
			IRenderQueueGroup* GetQueueGroup( UINT_8 groupID );
			RenderQueuedGroupMap* GetQueuedGroupMap(void);

		protected:
		private:

			UINT_8					defaultQueueGroup;
			RenderQueuedGroupMap	queuedGroupMap;
			UINT_16 defaultRenderablePriority;
		};
	}
}
#endif